package com.tlias.coutroller;

import com.tlias.entity.Dept;
import com.tlias.entity.Result;
import com.tlias.service.DeptService;
import jakarta.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.info.ProjectInfoProperties;
import org.springframework.context.annotation.Lazy;
import org.springframework.web.bind.annotation.*;

import java.util.List;
//@Lazy//延迟加载
//(inputStream1,  "UTF-8");IOUtils V IOUtils
@RestController//注解RestController里包括了@Controller和@Component注解,进行解耦合
@RequestMapping("/depts")//映射路径,映射后下面的路径都会加上/depts, @GetMapping,@DeleteMapping,@PutMapping,@PostMapping这几个就不用在添加/depts这一部分的路径
//@Slf4j
public class DeptController {
    public DeptController(){
        System.out.println("DeptController被创建了");
    }
    private static final Logger log = LoggerFactory.getLogger(DeptController.class);//日志代替不生效的//@Slf4j
    @Resource(name = "deptServicelmpl")//这个一定要首字母小写
    private DeptService deptService;
    @Autowired
    private ProjectInfoProperties projectInfoProperties;

    @GetMapping
    public Result list()
    {
        //调用service，获取数据
        List<Dept> deptList = deptService.list();
        return Result.success(deptList);
    }
    //根据id进行删除
    //方法一：使用@RequestParam注解@RequestParam加上之后，required默认值为true代表前端就必须要传递该参数，否则报错400，Bad Request
    // 果不需要眼制，可以将其设置required = false可以解决这个问题
    @DeleteMapping
//    public Result delete(@RequestParam(value = "id", required = false) Integer deptId){
//       // 调用service进行删除
//        deptService.delete(deptId);
//        System.out.println("删除了id为" + deptId + "的部门");
//        return Result.success();
//    }

    //建议使用方法二：使用再次简写 value的id对应的就是Integer deptId里的deptId ,
    // 简写成Integer id 这个自定义的id要和前端要求的id对应即可相当于是value = "id"的这个id
    public Result delete(Integer id)
    {
  deptService.delete(id);
//        System.out.println("删除了id为" + id + "的部门");
        log.info("删除了id为" + id + "的部门");
        return Result.success();
    }
    //添加部门
    @PostMapping
    public Result add(@RequestBody Dept dept)
    {
        deptService.save(dept);
//        log.info("添加了部门" + dept);
        return Result.success();
    }
    //根据ID查询
    @GetMapping("/{id}")//@RequestMapping("/depts")映射路径后省去了/depts部分
    public Result get(@PathVariable Integer id)//@PathVariable注解，将路径变量的值映射到形参中
    {
        Dept dept = deptService.getid(id);
        log.info("查询了id为" + id + "的部门");
        return Result.success(dept);
    }
    //修改部门
    @PutMapping
    public Result update(@RequestBody Dept dept)//@RequestBody Dept dept：将请求体中的 JSON 数据反序列化为 Dept 对象。
    {
        deptService.update(dept);
        log.info("修改了部门" + dept);
        return Result.success();
    }
}
